package com.testing.login;

import com.testing.sqlTest.MysqlUtils;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @Classname ${NAME}
 * @Description 类型说明
 * @Date 2021/5/19 22:59
 * @Created by 特斯汀Roy
 */
public class Login extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/plain;charset=utf-8");
        response.setCharacterEncoding("utf-8");
        //获取请求中的参数
        String user = request.getParameter("user");
        String password = request.getParameter("pwd");
        String result = "{";
        String status = "1";
        String msg = "恭喜您登录成功";

        //获取本次会话中请求里所有的cookie
        Cookie[] cookies = request.getCookies();
        if(cookies!=null){
            for (Cookie cookie : cookies) {
                System.out.println(cookie.getName() + "的值是：" + cookie.getValue());
            }
        }
        else{
            System.out.println("现在还没有Cookie");
        }


        //获取本次连接的session,类似于在通讯录查找来电号码
        HttpSession session = request.getSession();
        //访问的时候先获取本次sessionid。
        String sessionId = session.getId();
        //完成对于输入字符中是否包含特殊字符的校验。
        //正则表达式去查找输入内容中是否有特殊字符。
        //首先编写特殊字符的正则表达式[^\\w_-]
        Pattern pattern = Pattern.compile("[^\\w_\\-]");
        //在输入中查找是否包含特殊字符，如果matcher匹配到了就说明有特殊字符。
        Matcher userM = pattern.matcher(user);
        Matcher pwdM = pattern.matcher(password);
        //如果session中没有记录，就像一个未知号码的来电。
        //如果获取到的user是没有信息的，则需要登录
        if(session.getAttribute("user")==null) {
            if (!userM.find() && !pwdM.find()) {
                //       实现从数据库中查询用户密码验证登录是否成功。
                MysqlUtils utils = new MysqlUtils();
                if (utils.proCheckLogin(user, password)) {
                    //登录完成之后，进行记录
                    session.setAttribute("user", user);
                    session.setAttribute("age", 28);
                    //有效时长，设置session的生命周期,以秒为单位。相当于通话时长。
                    session.setMaxInactiveInterval(120);
                    //完成登录之后，返回一个生命周期更长的cookie
                    Cookie sid=new Cookie("JSESSIONID",sessionId);
                    //设置cookie的有效周期
                    sid.setMaxAge(120);
                    //返回cookie
                    response.addCookie(sid);

                } else {
                    status = "1000";
                    msg = "用户名密码错误";
                }
            } else {
                status = "1001";
                msg = "不能输入特殊字符";
            }
        }else{
            //如果session有信息，则不需要登录，告诉客户端我知道你是谁
            status="1002";
            msg=session.getAttribute("user")+  "用户已经登录过了，不能再次登录";
        }
            result += "\"status\":\"" + status + "\"," + "\"msg\":\"" + msg + "\"}";
            response.getWriter().append(result);


    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置返回结果的编码格式。
        response.setContentType("text/plain;charset=utf-8");
        response.setCharacterEncoding("utf-8");
        //获取请求中的参数
        String result = "{";
        String status = "1";
        String msg = "不支持get请求进行登录操作";
        result += "\"status\":\"" + status + "\"," + "\"msg\":\"" + msg + "\"}";
        response.getWriter().append(result);
    }
}
